声明

本文是学习GB-T 33264-2016 面向多核处理器的机器人实时操作系统应用框架. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们

1 范围

本标准规定了面向多核处理器的机器人实时操作系统的应用程序框架及其设计原则。

本标准适用于机器人实时操作系统开发者、机器人应用软件开发者及机器人操作系统使用者。

2 术语和定义

下列术语和定义适用于本文件。

2.1

机器人操作系统 robot operating system

由底层操作系统层和软件应用层组成,为机器人提供硬件抽象描述、底层驱动程序管理和程序间的

消息传递等类操作系统功能,以及定位绘图,任务规划,感知与导航等上层应用功能。

具体应用功能术语参照 GB/T 12643—2013。

2.2

多核处理器 multi-core processor

在一个处理器中集成两个或多个完整的计算引擎(内核),每个执行内核是独立的逻辑处理器,并

占用相应的执行资源。

2.3

机器人实时操作系统 real-time robot operating
system

保证机器人在规定的时间内完成特定任务,并能够协调所有实时任务的操作系统。

2.4

中断请求 interrupt request

向 CPU 发出命令请求,让CPU
暂停正在执行的程序,保护现场后去执行相应的处理程序,处理完

成后再继续执行之前的程序。

2.5

消息告知中断 message-signaled interrupt

在系统特定内存地址写入中断数据,通知CPU 中断。

2.6

node

直接执行运算任务的进程。

2.7

消息 message

一种用于节点间通信的数据结构。

2.8

主题 topic

用于发布/订阅消息内容的特定标识。

GB/T 33264—2016

2.9

服务 service

节点间的通信方式,由一个消息对组成,包括请求消息和回复消息。

2.10

节点管理器 node master

为节点存储主题和服务的注册信息,用于管理节点间的消息交换和调用服务。

2.11

package

组织机器人操作系统软件的主要形式,包括节点、独立于机器人操作系统的库、数据集、相关配置文

件以及第三方软件等。

2.12

stack

包的集合,能够提供一个完整的功能。

2.13

传输控制协议/因特网互联协议 transmission control
protocol/internet protocol

因特网最基本的协议,由传输层的TCP 协议和网络层的IP 协议组成。

2.14

用户数据报协议 user datagram protocol

一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

2.15

可扩展标记语言 extensible markup language

用于标记电子文件使其具有结构性的标记语言。

2.16

XML 远程过程调用 XML remote procedure call

使 用XML 格式来传输命令和数据,使用 HTTP 作为传输机制。

2.17

虚拟网络 virtual network

一种不包含物理连接,通过网络虚拟化实现的计算机网络。

3 缩略语

下列缩略语适用于本文件。

GPOS: 通用操作系统平台(General Platform for Operating System)

IRQ: 中断请求(Interrupt Request)

MSI: 消息告知中断(Message-signaled Interrupt)

ROS: 机器人操作系统(Robot Operating System)

RTOS: 实时操作系统(Real-time Operating System)

RGMP: 混合操作系统软件框架(RTOS and GPOS on Multi-core Processor)

TCP/IP: 传输控制协议/因特网互联协议(Transmission Control
Protocol/Internet Protocol)

UDP: 用户数据报协议(User Datagram Protocol)

VNET: 虚拟网络(Virtual Network)

XML: 可扩展标记语言(Extensible Markup Language)

XML-RPC:XML 远程过程调用(XML Remote Procedure Call)

GB/T 33264—2016

4 机器人实时操作系统的应用框架设计原则

4.1 概述

面向多核处理器的机器人实时操作系统的应用框架设计遵循以下原则:跨平台原则、结构分离原

则、功能模块化设计原则、多核分布式管理原则和可扩展原则。

4.2 跨平台原则

跨平台原则指的是机器人操作系统支持不同的硬件架构,如 Arm 和 X86
等。在不同的硬件架构

下,机器人实时操作系统可以稳定运行。

4.3 结构分离原则

从机器人操作系统运行平台(如 Arm 和 X86
等)角度,结构分离原则考虑的是非实时和实时操作
系统运行内核的分离,为非实时和实时节点提供不同的运行环境,便于节点管理,并提高节点运行的

效率。

4.4 功能模块化设计原则

节点按照功能划分进行模块化设计,每个节点具有独立的与平台无关的功能,提供机器人应用软件

复用性的支持。

4.5 多核分布式管理原则

具有独立功能的节点采用拓扑分布式的管理模式,便于操作系统应用软件层的集成和扩展。多核

分布式管理原则包括两方面:核间的节点分布和单个内核上的节点分布。

4.6 可扩展原则

可扩展原则是指机器人操作系统通过集成第三方(如机器人操作系统应用软件开发者或操作系统
无关的第三方库)的功能,快速改进或增加现有软件应用功能。功能模块化设计原则和多核分布式管理

原则是可扩展原则实现的前提。

5 机器人实时操作系统的应用框架

5.1 概述

机器人实时操作系统的应用框架反映的是面向多核处理器的操作系统各组件的功能划分和相互之
间的关系。如图1所示,机器人实时操作系统是一种 Linux 与 RTOS
相结合的混杂操作系统,称为

RGMP(RTOS and GPOS on Multi-core Processor)。

GB/T 33264—2016

style="width:7.6in;height:6.26736in" />

1 机器人实时操作系统的应用框架 RGMP

机器人实时操作系统的应用框架为层次化结构模型,自下而上分别为:

——硬件层:主要是多核处理器运算内核,为操作系统提供一个稳定的硬件平台,是
RGMP 正常运

行的基础层。

——底层操作系统层:在一个多核处理器的不同核上同时运行 Linux 和 RTOS,
为上层应用软件提

供底层的运行环境。其中一个核运行RTOS,
用于运行实时节点,其他核运行通用Linux。

——设备驱动层:主要提供操作系统支持下的硬件设备驱动程序、设备协议程序和设备服务程

序等。

——网络接口层:为 Linux 和 RTOS
提供一个快速稳定的通信接口,传递节点运行必要的信息、系

统运行状态信息等。

——软件应用层:软件应用以实时节点与非实时节点的形式运行,通过协调组织各应用软件功能构

件,实现机器人感知、行动、思维、人机交互等基本功能。

在层次化结构模型下,机器人实时操作系统应用框架规定了机器人操作系统研究和开发过程中中

断管理、分布式运行、通信接口、应用编程接口以及节点通信自定义消息等相关内容。

5.2 中断管理

中断管理的原则是让不同类型的操作系统各自运行在不同的CPU
核中,互不影响,即不同的 CPU
享有各自独立的外部设备以及外部中断,当几个外部设备共享一条 IRQ
总线的时候,RGMP 会针对不

同的情况有着各自的策略,具体如下:

——所有外部设备都是非实时设备:RGMP 在运行实时操作系统的 CPU 屏蔽该 IRQ
中断,让

Linux 完全接管整条中断线。

——所有外部设备都是实时设备:RGMP 对 I/O
APIC进行配置,采用静态分发的方式将此 IRQ

静态发送到实时操作系统所使用的CPU
中,最大限度地提高实时操作系统的响应速度。

——一条 IRQ 线上同时有实时与非实时中断:如果实时设备不支持 MSI,
为了提高系统整体的实 时性,无论是实时系统还是非实时系统,RGMP
让一条总线上的 IRQ 全部路由到同一个操作

系统使用的 CPU 中。

GB/T 33264—2016

5.3 分布式运行

在RGMP
应用框架中同时运行实时节点和非实时节点。如图2所示,节点的运行采用分布式架
构,各个实时与非实时节点之间的功能都是彼此独立的,便于复杂系统中节点的管理,便于根据机器人
应用场合的不同更改节点程序,实现对机器人的控制,提高机器人对不同外设的兼容性,并利用ROS

富的软件资源,扩展机器人的功能。另外,根据不同的控制场合,所有存在于非实时节点上的功能节点
可以被安装于远程计算机中,远程计算机通过以太网与本地机器人控制器相连接,实现对机器人的远程

控制。

节点部署的原则是实时节点拥有相对较高的任务优先级与中断优先级,运行在
RTOS 操作系统 上,非实时节点的运行方式与普通 Linux 程序相同,运行在
Linux 上。如图2所示,实时性要求高的节 点运行在 RTOS
上,主要负责对机器人的各个关节进行闭环控制外加部分运动学解算,而非实时节点

的主要功能包括机器人的三维动态仿真、人机交互、运动学解算等。

style="width:8.26736in;height:5.92708in" />

2 分布式应用软件框架

5.4 通信接口

通信接口规定了三种不同类型,包括实时节点与非实时节点之间、ROS
节点之间和实时 ROS 节点

之间通信:

——实时节点与非实时节点之间:使用标准的ROS
节点通信传输协议。在实时与非实时节点之间
创建一个以虚拟网络为接口,以提高通信效率同时保持程序的可移植性。底层用共享内存的
方式实现的虚拟网桥"VNET"。
在系统运行时,实时节点与任何种类的节点通信都首先要通

过 VNET 虚拟网桥。

——ROS 节点间的通信:建立在TCP/IP
标准协议之上,节点之间通过在网络层发送标准的 TCP 或者 UDP
包进行通信。通信协议封装成 Topic 与 Message 两种形式,便于使用 ROS
提供的

标准C++ 接口函数实现节点间的数据收发。

——实时 ROS 节点之间的通信:使用XML-RPC
协议。所有的消息在发送前以符合XML-RPC 消
息格式的方式进行打包。在接受消息的时候以相同的协议进行解包。这样的流程在分布式系

统中便于节点间的数据通信的管理,降低应用程序开发人员的负担,增加程序的可移植性。在

GB/T 33264—2016

实时节点通信的网络层,使用标准的TCP 网络通信协议。

5.5 应用编程接口

应用编程接口规定实时操作系统级函数接口、非实时节点、实时节点的应用编程接口规范,为机器

人实时操作系统提供一个统一的标准规范。

5.6 实时操作系统的函数接口

机器人实时操作系统作为混合系统软件框架,为实时操作系统提供了良好的函数接口。为了方便
用户开发,它提供满足操作系统基本功能的链接库
librgmp.a和与移植相关的头文件 rtos.h。用户要移
植实时操作系统,不需要再考虑实时操作系统对于 CPU 模式转换、CPU
初始化等问题,甚至不需要再
编写与实时操作系统启动相关的汇编代码,就可以实现对于实时操作系统的移植。实时系统需要移植

的关键函数与变量的相关功能参见附录 A 表 A.1。

5.7 非实时节点的应用编程接口

非实时节点运行以机器人操作系统 ROS 平台上,所有 ROS 的 Node
节点都是由不同 ROS 的 Packages
经过编译产生的。根据面向对象编程的特点,ROS 节点能够通过继承不同的
Packages 让系 统拥有各种复杂功能。所有的 ROS 节点都需要继承几个 ROS
核心功能包,如 roscore,roscpp,

roslang等。

编写ROS 功能节点程序就必须调用ROS 的相关资源库,ROS 所使用的库除了
Linux 的标准系统

调用以外,还有一些与 C++
相关的模板库和与节点通信相关的函数库,主要包括:Boost,Libc,XML-

RPC,Math 等。具体非实时节点的应用编程接口参见B.1~B.11 所示。

5.8 实时节点的应用编程接口

在实时系统上开发 ROS
实时节点的软件框架,其代码与操作系统无关,以应用程序的形式存在于
实时系统当中。在标准 ROS 中,依赖 C++ 语言的 ROS 功能节点都是基于 ROSCPP
核心节点包和 XML-RPC 通信协议栈。考虑到 ROS 实时节点的可移植性,将
XML-RPC 功能与 ROSCPP 的核心功 能统一封装在一个与系统无关的 ROS
功能节点包 RTroscpp 中。利用RTroscpp 提供的基本接口开发

与 ROS 系统函数库无关但是符合 ROS 标准通信协议的ROS 功能节点。

5.9 节点通信自定义消息

在实时操作系统 RTOS 中,用户要编写自己的 ROS
节点,还需要定义相关的消息头文件。在标准 ROS 中,自定义 ROS
消息需要通过标准 ROS 的 msg gen 工具生成关于自定义消息的相关C++ 与
Python 头文件。在头文件中,节点消息是以类的方式呈现的,它继承 ROS
标准消息类,类中包含有针

对自定义消息的打包函数。以下是 ROS 消息在传输过程中的要素:

——callerid:发送消息的节点名字;

——topic:接收消息的节点接收的话题名字;

— service:客户端节点请求的服务名字;

——md5sum: 针对此消息类型的 md5sum 值 ;

——type:消息所包含的数据类型;

——message definition:完整的消息定义(基于C++ 或者是 Python 语言);

——error:在链接错误时的错误消息;

ersistent;由客户端节点发往服务器节点的字段,用于处理多重数据请求

——tcp nodelay:从消息接收端发往发送端的消息。

GB/T 33264—2016

针对不同的消息定义,以上的大部分元素都是不同的,特别是 md5sum
校验码。由于在实时操作 系统中没有相关的msg gen
工具,但是程序员可以把标准 ROS 中生成的消息头文件放置到实时节点

头文件中,就可以使用相关的自定义节点。图3中是数据消息的格式。

消息传输数据包格式

style="width:9.18669in;height:6.29992in" />自定义消息定义

类型l a

类型2 b

· ·

类型n n

数据包头长度(4字节)

message definition字段长度(4字节)

message definition字段

calkrid字段长度(4字节)

callerid字段

latching字段长度(4字节)

latching字段

md5sum 字段长度(4字节)

md5sum 字段

topic字段长度(4字节)

topic字段

message type字段长度(4字节)

message type字段

message body字段长度(4字节)

类型1字段长度(4字节)

类型1字段

· ·

类型n字段长度(4字节)

类型n字段

3 ROS 自定义消息的转换

GB/T 33264—2016

A

(资料性附录)

实时系统需要移植的关键函数和变量的相关功能

机器人实时操作系统为实时操作系统提供了良好的函数接口,便于用户移植实时操作系统。实时

系统需要移植的关键函数与变量的相关功能如表 A.1 所示。

A.1 实时系统需要移植的关键函数和变量的相关功能

函数名称

主要功能

rtos entry()

实时系统的启动入口函数

rtos get mem()

获得内存(物理地址)

rtos free mem()

释放内存页(物理地址)

rtos kmalloc

动态获得内存空间(非连续)

rtos kfree()

动态释放内存空间(非连续)

rtos enter interrupt()

进入嵌套中断

rtos exit interrupt()

退出嵌套中断

rtos timer isr()

实时系统定时器中断处理

rtos stop running()

实时系统退出

rtos sem init()

信号量机制

rtos sem up()

rtos sem down()

rtos bridge init()

实时与非实时系统间的通信

rtos vnet init()

rtos vnet recv()

GB/T 33264—2016

B

(资料性附录)

非实时节点应用编程接口

ROS 所使用的库除了Linux 的标准系统调用以外,还有一些与 C++
相关的模板库和与节点通信

相关的函数库,为非实时节点的应用提供了丰富的接口。

B.1 roscpp.ROS 应用接口

为用户提供库,使C++ 用户可以很快地链接到 ROS 的
topics,services和参数,如表B.1 所示。

B.1 关于应用接口的 C++ 接口类型及说明

C++接口类型

说明

genmsg cpp

用于自动生成符合ROS接口规范的消息定义函数

gensrv cpp

用于自动生成符合ROS接口规范的服务定义函数

msg gen

用于自动生成符合ROS接口规范的消息头文件

ros::file log

用于自动生辰ROS节点运行监控文件的相关函数

ros::init options

ROS节点启动方式初始化函数

ros::master

包含允许用户查询主机的函数

ros::names

包含允许用户操作ROS空间的函数

ros::network

ROS节点通信框架函数

ros::param

包含允许用户查询参数服务器的函数

ros::service

包含查询服务和调用服务的函数

ros::thisnode

当前进程使用的ROS节点的信息函数

ros::topic

ROS标准话题发布软件框架函数

ros::xmlrpc

与ROS节点通信相关底层接口函数

roscpp

基于C++的ROS节点底层函数

rosgraph

ROS节点调试信息打印输出函数

B.2 common msgs. 基本数据类型接口

基本数据类型接口包含了ROS 功能包广泛用到的消息类型,如表 B.2 所示。

B.2 关于基本数据类型接口的消息类型及说明

消息类型

说明

actionlib msgs

动作消息

diagnostic msgs

诊断消息

GB/T 33264—2016

B.2 ( 续 )

消息类型

说明

geometry msgs

几何图元消息

nav msgs

机器人导航消息

sensor msgs

常用传感器消息

B.3 message filters.操作信息接口

根据过滤器的条件,输入和输出所对应的消息,如表 B.3 所示。

B.3 关于操作信息接口的 C++ 接口类型及说明

C + + 接 口 类 型

说明

message filters::Subscriber

消息订阅

message filters::Cache

消息缓存

message filters::TimeSynchronizer

消息的时间同步

message filters::TimeSequence

消息的时间队列

B.4 drivers.驱

驱动接口包含了常用的驱动类型,如表B.4 所示。

B.4 关于驱动接口的 C++ 接口类型及说明

C++接口类型

说明

ioystick drivers

操纵杆驱动

camera drivers

摄像头驱动

laser drivers

激光传感器驱动

sound drivers

声频传感器驱动

imu drivers

惯性测量单元驱动

B.5 3D processing.3D 数据处理编程接口

3D 数据处理编程接口包含了常用的3D 处理编程库,如表 B.5 所示。

GB/T 33264—2016

B.5 3D 数据处理编程接口的 C++
接口类型及说明

C++接口类型

说明

3D processing

3D信息处理

perception pcl

点云处理

B.6 image common. 基本图像处理编程接口

基本图像处理编程接口包含了ROS 里的基本图像处理功能,如表B.6 所示。

B.6 关于基本图像处理编程接口的功能包类型及说明

功能包类型

说明

image transport

转换低频宽的压缩形式图像

camera calibration parsers

摄像头校正参数解析

camera info manager

保存、恢复和校正数据的C++接口

polled camera

定义摄像头图像的ROS接口

B.7 image pipeline.图像传递编程接口

为原始图像数据提供中间处理,以用于最终高水平的处理,如表B.7 所示。

B.7 关于图像传递编程接口的主题类型及说明

主题类型

说明

image raw

未处理的图像数据

camera info

摄像头内部和外部参数信息

set camera info

设置摄像头校准参数

B.8 vision opencv.OpenCV 编程接口

链接 ROS 与 OpenCV 的功能包,提供处理计算机实时图像的函数库,如表B.8
所示。

B.8 OpenCV 编程接口的功能包类型及说明

功能包类型

说明

ey bridge

ROS消息与OpenCV之间的桥梁

image geometry

图像和几何像素的处理方法

GB/T 33264—2016

B.9 Transforms/Coordinates.坐标转换接口

坐标转换接口包含了对机器人姿态和坐标转换的功能包,如表 B.9 所示。

B.9 关于坐标转换接口的功能包类型及说明

功能包类型

说明

tf

多坐标系间的坐标转换

tf conversions

包含了坐标系基本转换形式的功能函数

robot state publisher

机器人状态信息发布器

B.10 simulator gazebo.3D仿真编程接口

利用ROS 为机器人提供3D 仿真环境,如表 B.10 所示。

B.10 3D 仿真编程接口的主题类型及说明
style="width:0.56656in;height:0.5467in" />

主题类型

说明

set link state

设置机器人连杆姿态

set model state

设置机器人模型姿态

B.11 move arm. 机器人运动规划编程接口

对机械臂实现点到点的运行控制,并规划关节的运动轨迹,具体说明如表B.11~
表 B.15 所示。

B.11 ROS 参数名称、参数类型及说明

参数名称

参数类型

说明

move arm frequency

double,default:50.0

机械臂闭环运动频率

group

string,default:""

关节集合

ik allowed time

double,default:2.0

逆运动学求解的允许时间

trajectory filter allowed time

double, default:2.0

轨迹滤波允许时间

controller action name

string,default

控制器执行动作的标识

B.12 订阅主题名称、主题类型及说明

主题名称

主题类型

说明

move arm/goal

move arm msgs/MoveArmGoal

机器人目标位置

move arm/cancel

actionlib msgs/GoallD

取消目标位置

GB/T 33264—2016

B.13 发布主题名称、主题类型及说明

主题名称

主题类型

说明

move arm/feedback

move arm msgs/MoveArmFeedback

运动反馈

move arm/status

actionlib msgs/GoalStatusArray

目标状态信息

move arm/result

ove arm msgs/MoveArmActionResult

错误结果反馈

B.14 服务名称、主题类型及说明

服务名称

主题类型

说明

get joints in group

planning environment msgs/GetJointsInGroup

获取机器人关节

get robot state

planning environment msgs/GetRobotState

获取机器人状态信息

get environment safety

planning environment msgs/GetEnvironmentSafety

获取环境的安全性

get execution safety

planning environment msgs/GetJointTrajectoryValidity

获取任务执行的安全

get trajectory validity

planning environment msgs/GetJointTrajectoryValidity

获取轨迹的有效性

arm ik

kinematics msgs/GetConstraintAwarePositionIK

逆运动学

filter trajectory

motion planning msgs/FilterJointTrajectoryWithConstraints

轨迹信息滤波

B.15 可视化主题名称、主题类型及说明

主题名称

主题类型

说明

display joint goal

motion planning msgs/DisplayTrajectory

显示关节目标位置

display path

motion planning msgs/DisplayTrajectory

显示机械臂路径

allowed contact regions array

visualization msgs/MarkerArray

允许机械臂接触区域的序列

GB/T 33264—2016

延伸阅读

更多内容 可以 GB-T 33264-2016 面向多核处理器的机器人实时操作系统应用框架. 进一步学习

联系我们

DB3708-T 32-2023 物业服务企业养老服务规范 济宁市.pdf